Pinvon's Blog

所见, 所闻, 所思, 所想

MySQL(四) WHERE 子句

使用 WHERE 子句

数据库表一般都包含了大量数据, 需要检索表中所有行的情况比较少见. 通常, 我们只需要检索满足某些条件的数据.

在 SELECT 语句中, 可以使用 WHERE 子句指定搜索条件, WHERE 子句需要放在 FROM 子句之后.

SELECT column_1, column_2 FROM table_name WHERE column_2=2.5;

这条语句的意思是, 从 table_name 中检索两个列, 但不返回所有行, 只返回 column_2 的值为 2.5 的行.

思考

SQL 的 SELECT 语句可以过滤数据, 而我们平时开发的应用程序, 也可以对数据进行过滤. 但我们一般会选择在数据库中对数据进行过滤, 原因有以下2点:

  1. 数据库进行了优化, 可以快速有效地对数据进行过滤; 如果由我们开发的应用程序进行过滤, 会极大影响应用的性能.
  2. 如果在我们开发的应用程序上进行过滤, 数据库必须发送多余的数据, 浪费资源.

WHERE 子句操作符

WHERE 子句支持的条件操作符

操作符 描述
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间

检查单个值

SELECT column_1, column_2 FROM table_name WHERE column_1 = 'fuse';

MySQL 在执行匹配时, 默认不区分大小写, 所以 fuse 和 Fuse 都会被匹配.

小于号 < 的例子:

SELECT column_1, column_2 FROM table_name WHERE column_2 < 10;

不等于操作符 <> 的例子:

SELECT column_1, column_2 FROM table_name WHERE column_1 <> 'fuse';

注意, SQL 语句中, 如果值的类型为字符串, 需要放在单引号之间. 如果是数值类型则不用.

范围操作符 BETWEEN 的例子:

SELECT column_1, column_2 FROM table_name WHERE column_2 BETWEEN 2.5 AND 10;

BETWEEN 关键字需要两个值, 并用 AND 关键字连起来. BETWEEN 匹配的值包括指定的开始值和结束值.

空值检查

NULL(空值) 与 0, 空字符串, 空格不同.

以下 SQL 语句可以检查出所有 column_2 为 NULL 的行:

SELECT column_1 FROM table_name WHERE column_2 IS NULL;

WHERE 子句组合

多个 WHERE 子句可以通过 AND 或 OR 连接起来. 如:

SELECT column_1, column_2 FROM table_name WHERE column_3 = 1003 AND column_4 <= 10;

如果有不止两个 WHERE 子句, 也是用 AND 将他们连接. AND 表示要满足所有给定条件的行.

OR 子句的用法一样, 但表达的意思不同, 意思是只要满足其中一个条件就可以.

AND 与 OR 的组合

SELECT column_1, column_2 FROM table_name WHERE column_3=1002 OR column_3=1003 AND column_2>=10;

由于 AND 的优先级会更高, 所以这一句的意思被认为是: 满足条件 column_3=1002 的数据, 或满足条件 column_2>=10 且 column_3=1003 的数据.

如果要改成满足条件 column_3=1002 或者 column_3=1003 并且 column_2>=10 的数据, 应该这么写:

SELECT column_1, column_2 FROM table_name WHERE (column_3=1002 OR column_3=1003) AND column_2>=10;

Comments

使用 Disqus 评论
comments powered by Disqus